/**
 * 判断时间是否在指定时间范围内
 * beginTime 开始时间 : 10:10
 * endTime   结束时间 : 12:00
 * nowTime   当前时间 : 11:00 (可不传,默认为当前时间)
 */
function timeRange(beginTime, endTime, nowTime) {

	var b = new Date();
	var e = new Date();
	var n = new Date();

	var strb = beginTime.split(":");
	if (strb.length != 2) {
		return false;
	}

	var stre = endTime.split(":");
	if (stre.length != 2) {
		return false;
	}
	if(nowTime){
		var strn = nowTime.split (":");
		if (stre.length != 2) {
			return false;
		}
		n.setHours(strn[0]);
		n.setMinutes(strn[1]);
	}
	
	b.setHours(strb[0]);
	b.setMinutes(strb[1]);
	e.setHours(stre[0]);
	e.setMinutes(stre[1]);
	//如果营业时间开始时间值大于结束时间 说明是跨0点,后面的 日期需要+1天
	if (beginTime > endTime) {
		//当前时间小于开始时间 , 并且大于结束时间  则不再营业范围内
		if (n.getTime() - b.getTime() < 0 && n.getTime() - e.getTime() > 0) {
			return false;
		}
		e.setDate(e.getDate() + 1);//时间加1天
		console.log(n.getTime() - e.getTime());
		if (n.getTime() - b.getTime() < 0 && n.getTime() - e.getTime() < 0) {
			return true;
		}
	}
	if (n.getTime() - b.getTime() > 0 && n.getTime() - e.getTime() < 0) {
		return true;
	} else {
		console.log("当前时间是：" + n.getHours() + ":" + n.getMinutes() + "，不在该时间范围内！");
		return false;
	}
}

/**
 * 获取两个时间的相差多少 时分秒 , 可用于倒计时
 * 开始时间 , 结束
 * 
 * @returns 
 */
function getTwoTime(date1, date2) {


	var begintime_ms = Date.parse(new Date(date2.replace(/-/g, "/"))); // begintime
	// 为开始时间
	var endtime_ms = Date.parse(new Date(date1.replace(/-/g, "/")));   // endtime
	// 为结束时间
	// 得到的结果为 毫秒数，可根据 毫秒数的大小，来判断时间。
	// 当然根据毫秒数 可以根据他们的差值 来求相差的天数或是小时等。
	// -------------------------------
	// 以上是求得 用户输入时间的毫秒数
	// var date1=new Date(); //开始时间
	// var date2=new Date(); //结束时间
	// var date3=date2.getTime()-date1.getTime() //时间差的毫秒数
	var date3 = begintime_ms - endtime_ms;  // 时间差的毫秒数
	// ------------------------------
	// 计算出相差天数
	var days = Math.floor(date3 / (24 * 3600 * 1000))

	// 计算出小时数
	var leave1 = date3 % (24 * 3600 * 1000)    // 计算天数后剩余的毫秒数
	var hours = Math.floor(leave1 / (3600 * 1000))
	// 计算相差分钟数
	var leave2 = leave1 % (3600 * 1000)        // 计算小时数后剩余的毫秒数
	var minutes = Math.floor(leave2 / (60 * 1000))
	// 计算相差秒数
	var leave3 = leave2 % (60 * 1000)      // 计算分钟数后剩余的毫秒数
	var seconds = Math.round(leave3 / 1000)
	// console.log(" 相差 "+days+"天 "+hours+"小时 "+minutes+" 分钟"+seconds+" 秒")
	var map = {};
	map['d'] = days;
	map['h'] = hours;
	map['m'] = minutes;
	map['s'] = seconds;
	return map;
}

/**
 * 时间格式化  默认 YY-MM-DD hh:mm:ss
 */
function formatDate(time, format = 'YY-MM-DD hh:mm:ss') {
	var date = new Date(time);
	var year = date.getFullYear(),
		month = date.getMonth() + 1,// 月份是从0开始的
		day = date.getDate(),
		hour = date.getHours(),
		min = date.getMinutes(),
		sec = date.getSeconds();
	var preArr = Array.apply(null, Array(10)).map(function (elem, index) {
		return '0' + index;
	});// //开个长度为10的数组 格式为 00 01 02 03

	var newTime = format.replace(/YY/g, year)
		.replace(/MM/g, preArr[month] || month)
		.replace(/DD/g, preArr[day] || day)
		.replace(/hh/g, preArr[hour] || hour)
		.replace(/mm/g, preArr[min] || min)
		.replace(/ss/g, preArr[sec] || sec);

	return newTime;
}

module.exports = {
    timeRange,
	getTwoTime,
	formatDate
}